#include "stdafx.h"
#include "TColStd_Array1OfReal.h"
#include "gp.h"

//=======================================================================
//function : TCollection_Array1
//purpose  : 
//=======================================================================

 TCollection_Array1::TCollection_Array1(const int Low,
	const int Up) :
	myLowerBound(Low),
	myUpperBound(Up),
	isAllocated(true)
{
	Standard_RangeError_Raise_if(Up < Low, "TCollection_Array1::Create");


	Array1Item* p = new Array1Item[Up - Low + 1];

	myStart = (void*)(p - myLowerBound);
}

//=======================================================================
//function : TCollection_Array1
//purpose  : C Array constructor
//=======================================================================

 TCollection_Array1::TCollection_Array1(const Array1Item& AnItem,
	const int Low,
	const int Up) :
	myLowerBound(Low),
	myUpperBound(Up),
	isAllocated(false)
{
	Standard_RangeError_Raise_if(Up < Low, "Array1::CArray");
	myStart = (void*)(&AnItem - Low);
}

//=======================================================================
//function : Destroy
//purpose  : 
//=======================================================================

 void TCollection_Array1::Destroy()
{
	if (isAllocated) {
		delete[] & ChangeValue(myLowerBound);
	}
}

//=======================================================================
//function : Length
//purpose  : 
//=======================================================================

 int TCollection_Array1::Length() const
{
	return myUpperBound - myLowerBound + 1;
}


//=======================================================================
//function : Lower
//purpose  : 
//=======================================================================

 int TCollection_Array1::Lower() const
{
	return myLowerBound;
}


//=======================================================================
//function : Upper
//purpose  : 
//=======================================================================

 int TCollection_Array1::Upper() const
{
	return myUpperBound;
}


//=======================================================================
//function : IsAllocated
//purpose  : 
//=======================================================================

 bool TCollection_Array1::IsAllocated() const
{
	return isAllocated;
}

//=======================================================================
//function : Value
//purpose  : 
//=======================================================================

 const Array1Item& TCollection_Array1::Value
(const int Index) const
{
	Standard_OutOfRange_Raise_if((Index < myLowerBound || Index > myUpperBound), NULL);
	return ((Array1Item *)myStart)[Index];
}

//=======================================================================
//function : SetValue
//purpose  : 
//=======================================================================

  void TCollection_Array1::SetValue(const int Index,
	const Array1Item& Value)
{
	Standard_OutOfRange_Raise_if((Index < myLowerBound || Index > myUpperBound), NULL);

	((Array1Item *)myStart)[Index] = Value;
}


//=======================================================================
//function : ChangeValue
//purpose  : 
//=======================================================================

 Array1Item& TCollection_Array1::ChangeValue(const int Index)
{
	Standard_OutOfRange_Raise_if((Index < myLowerBound || Index > myUpperBound), NULL);

	return ((Array1Item *)myStart)[Index];
}



